home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tex / lgrind.zoo / lgrind.sty < prev    next >
Text File  |  1992-09-28  |  6KB  |  186 lines

  1. %% 
  2. %% This is file `lgrind.sty' generated
  3. %% on <1991/9/13> with the docstrip utility (v1.1l test). 
  4. %% 
  5. %% The original source file was `lgrind.doc'.
  6. %% 
  7. %% 
  8. %% lgrind is a minor adaptation of Jerry Leichter's tgrind for LaTeX, 
  9. %% which was a notable improvement upon Van Jacobsen's tgrind for 
  10. %% plain TeX, which was adapted from vgrind, a troff prettyprinter. 
  11. %% 
  12. %% LaTeX lgrind environment
  13.  
  14. \newif\ifc@mment %True when setting a comment
  15. \newif\ifstr@ng %True when setting a string constant
  16. \newif\ifright@ %In comments, \" => '' (else ``)
  17. \newif\ifLGd@fault %True after default \LGbegin
  18. \newcount\lc@unt %Line counter
  19. \newcount\ln@xt %Next line to get numbered
  20. \newbox\ls@far %Stores lines so far for tabbing
  21. \newdimen\TBw@d %Tabwidth when tabbing
  22. \newbox\tb@x %Tab positioning
  23. \newdimen\@ts %Width of listing space
  24. {\catcode`\_=\active \gdef\@setunder{\let_=\sp@ce}}
  25.  
  26. \def\BGfont{\sf} %"Background" font
  27. \def\CMfont{\rm} %Comment font
  28. \def\KWfont{\bf} %Keyword font
  29. \def\STfont{\tt} %String font
  30. \def\VRfont{\it} %Variable name font
  31. \def\LGsize{\small} %Size to use in displayed code
  32. \def\LGfsize{\footnotesize} %Size to use in \lgrindfile
  33. \newif\ifLGinline %True for in-line code
  34. \newif\ifLGleftnum %Put line numbers on the left
  35. \newcount\LGnuminterval %Line numbering interval
  36. \LGnuminterval=10
  37. \newskip\LGindent %Indentation for displayed lines
  38. \LGindent=1.6667\parindent
  39. \def\LGbegin{\ifLGinline$\hbox\else$$\vbox\fi\bgroup\LGd@faulttrue}
  40. \def\LGend{\ifLGd@fault\egroup\ifLGinline$\else$$\fi\LGd@faultfalse\fi}
  41.  
  42. \def\lgrind{%
  43. \def\Line##1{\L{\LB{##1}}}% %For use with %=
  44. \let\Head=\@gobble %Header information (-h)
  45. \def\File##1,##2,##3{}% %File specification info
  46. \let\Proc=\@gobble %Marks procedure def beginning
  47. \let\ProcCont=\@gobble %Marks end of nested procedure def
  48. \def\NewPage{\filbreak\bigskip}%
  49. \ifLGinline
  50.  \def\L##1{\setbox\ls@far\null\CF\strut##1\ignorespaces}%
  51. \else
  52.  \let\r@ghtlno\relax\let\l@ftlno\relax
  53.  \ifnum\LGnuminterval>\z@
  54.   \ifLGleftnum
  55.    \def\l@ftlno{\ifnum\lc@unt>\ln@xt\global\advance\ln@xt by\LGnuminterval
  56.      \llap{{\scriptsize\the\lc@unt\quad}}\fi}%
  57.   \else
  58.   \def\r@ghtlno{\ifnum\lc@unt>\ln@xt\global\advance\ln@xt by\LGnuminterval
  59.      \rlap{{\scriptsize\enspace\the\lc@unt}}\fi}%
  60.   \fi
  61.  \fi
  62.  \def\L##1{\@@par\setbox\ls@far=\null\CF\strut
  63.   \global\advance\lc@unt by1%
  64.   \hbox to\hsize{\hskip\LGindent\l@ftlno ##1\hfil\r@ghtlno}\ignorespaces}%
  65. \fi
  66. \lc@unt=0\ln@xt=\LGnuminterval\advance\ln@xt by-1%
  67. \def\LB{\CF\hbox\bgroup\box\ls@far\let\next=}%
  68. \def\Tab##1{\setbox\tb@x=\lastbox\TBw@d=\wd\tb@x\advance\TBw@d by 1\@ts
  69.  \ifdim\TBw@d>##1\@ts
  70.   \setbox\ls@far=\hbox{\box\ls@far \box\tb@x \sp@ce}\else
  71.   \setbox\ls@far=\hbox to ##1\@ts{\box\ls@far \box\tb@x \hfil}\fi\LB}%
  72. \ifLGinline\def\sp@ce{\hskip .3333em}%
  73. \else \setbox\tb@x=\hbox{{\tt 0}}\@ts=\wd\tb@x \def\sp@ce{\hskip 1\@ts}\fi
  74. \catcode`\_=\active \@setunder
  75. \let\CF=\BGfont
  76. \def\K##1{{\KWfont ##1}\global\futurelet\next\ic@r}% %Keyword
  77. \def\V##1{{\VRfont ##1}\global\futurelet\next\ic@r}% %Variable
  78. \def\ic@r{\let\@tempa\/\ifx.\next\let\@tempa\relax% %Optional \/
  79.  \else\ifx,\next\let\@tempa\relax\fi\fi\@tempa}%
  80. \def\C{\CMfont \global\let\CF\CMfont \global\c@mmenttrue \global\right@false}%
  81. \def\CE{\BGfont \global\let\CF\BGfont \global\c@mmentfalse}%
  82. \def\S{\STfont \global\let\CF\STfont \global\str@ngtrue}%
  83. \def\SE{\BGfont \global\let\CF\BGfont \global\str@ngfalse}%
  84. \def\,{\relax \ifmmode\mskip\thinmuskip \else\thinspace \fi}%
  85. \def\!{\relax \ifmmode\mskip-\thinmuskip \else\negthinspace \fi}%
  86. \def\CH##1##2##3{\relax\ifmmode ##1\relax
  87. \else\ifstr@ng ##2\relax\else$##3$\fi\fi }%
  88. \def\{{\CH\lbrace {\char'173}\lbrace }%
  89. \def\}{\CH\rbrace {\char'175}\rbrace }%
  90. \def\1{\CH///}% %/
  91. \def\2{\CH\backslash {\char'134}\backslash }% %\
  92. \def\|{\CH|{\char'174}|}%
  93. \def\<{\CH<<<}%
  94. \def\>{\CH>>>}%
  95. \def\*{\CH***}\relax %\relax for DOCSTY
  96. \def\-{\CH---}%
  97. \def\_{\ifstr@ng {\char'137}\else
  98.   \leavevmode \kern.06em \vbox{\hrule width.35em}%
  99.   \ifdim\fontdimen\@ne\font=\z@ \kern.06em \fi\fi }%
  100. \def\&{{\sf \char'046}}%
  101. \def\#{{\STfont \char'043}}%
  102. \def\%{{\char'045}}%
  103. \def\~{{\char'176}}%
  104. \def\"{\ifc@mment\ifright@ ''\global\right@false \else``\global\right@true \fi
  105.    \else{\tt \char'042}\fi}%
  106. \def\'{\ifc@mment'\else {\tt \char'015}\fi}%
  107. \def\^{{\tt \char'136}}%
  108. \def\${{\ifmmode\sl\else\ifdim\fontdimen\@ne\font>\z@\sl\fi\fi
  109.   \char'044}}% %No $ in \it, use \sl
  110. \parindent\z@\parskip\z@ plus 1pt\hsize\linewidth%
  111. }
  112. \def\endlgrind{\@@par}
  113. \def\lgrinde{\ifLGinline\else\LGsize\fi\begin{lgrind}}
  114. \def\endlgrinde{\end{lgrind}}
  115.  
  116. \def\lagrind{\@ifstar{\@slagrind}{\@lagrind}}
  117.  
  118. \def\@lagrind{\@ifnextchar[{\@@lagrind}{\@@lagrind[t]}}
  119. \def\@slagrind{\@ifnextchar[{\@@slagrind}{\@@slagrind[t]}}
  120.  
  121. \def\@@lagrind[#1]#2#3#4{%
  122.     \begin{figure}[#1]
  123. \hrule
  124. \vskip .5\baselineskip
  125. \begin{minipage}\columnwidth\LGsize\LGindent\z@
  126.     \begin{lgrind}
  127. \input #2\relax
  128.     \end{lgrind}
  129. \end{minipage}
  130. \vskip .5\baselineskip plus .5\baselineskip
  131. \begingroup
  132.     \setbox\z@=\hbox{#4}%
  133.     \ifdim\wd\z@>\z@
  134. \caption{#3}%
  135. \label{#4}%
  136.     \else
  137. \captcont{#3}%
  138.     \fi
  139. \endgroup
  140. \vskip 2pt
  141. \hrule
  142.     \end{figure}
  143. }
  144.  
  145. \def\@@slagrind[#1]#2#3#4{%
  146.     \begin{figure*}[#1]
  147. \hrule
  148. \vskip .5\baselineskip
  149. \begin{minipage}\textwidth\LGsize\LGindent\z@
  150.     \begin{lgrind}
  151. \input #2\relax
  152.     \end{lgrind}
  153. \end{minipage}
  154. \vskip .5\baselineskip plus .5\baselineskip
  155. \begingroup
  156.     \setbox\z@=\hbox{#4}%
  157.     \ifdim\wd\z@>\z@
  158. \caption{#3}%
  159. \label{#4}%
  160.     \else
  161. \captcont{#3}%
  162.     \fi
  163. \endgroup
  164. \vskip 2pt
  165. \hrule
  166.     \end{figure*}
  167. }
  168.  
  169. \def\lgrindfile#1{%
  170.     \par\addvspace{0.1in}
  171.     \hrule
  172.     \vskip .5\baselineskip
  173.     \begingroup\LGfsize\LGindent\z@
  174. \begin{lgrind}
  175.     \input #1\relax
  176. \end{lgrind}
  177.     \endgroup
  178.     \vskip .5\baselineskip
  179.     \hrule
  180.     \addvspace{0.1in}
  181. }
  182.  
  183. \endinput
  184. %% 
  185. %% End of file `lgrind.sty'.
  186.